From 0d1c3638083abdd647fac102a3dd26b5164c2cf9 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Sun, 30 Apr 2006 16:40:14 +0000 Subject: [PATCH] Bring in after_read and before_write procedures for garmin devices. --- gpsbabel/garmin_fs.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ gpsbabel/garmin_fs.h | 4 ++++ 2 files changed, 57 insertions(+) diff --git a/gpsbabel/garmin_fs.c b/gpsbabel/garmin_fs.c index 14c4f4744..91858f3df 100644 --- a/gpsbabel/garmin_fs.c +++ b/gpsbabel/garmin_fs.c @@ -252,3 +252,56 @@ garmin_fs_merge_category(const char *category_name, waypoint *waypt) GMSD_SET(category, cat); return 1; } + +void +garmin_fs_garmin_after_read(const GPS_PWay way, waypoint *wpt, const int protoid) +{ + garmin_fs_t *gmsd = NULL; + + gmsd = garmin_fs_alloc(protoid); + fs_chain_add(&wpt->fs, (format_specific_data *) gmsd); + + /* nothing happens until gmsd is allocated some lines above */ + + /* !!! class needs protocol specific conversion !!! (ToDo) + GMSD_SET(wpt_class, way[i]->wpt_class); + */ + /* flagged data fields */ + GMSD_SET(display, gt_switch_display_mode_value(way->dspl, gps_waypt_type, 1)); + if (way->category != 0) GMSD_SET(category, way->category); + if (way->dst < 1.0e25f) GMSD_SET(proximity, way->dst); + if (way->temperature_populated) GMSD_SET(temperature, way->temperature); + if (way->dpth < 1.0e25f) GMSD_SET(depth, way->dpth); + GMSD_SETNSTR(cc, way->cc, sizeof(way->cc)); + GMSD_SETNSTR(state, way->state, sizeof(way->state)); + GMSD_SETSTR(city, way->city); + GMSD_SETSTR(facility, way->facility); + GMSD_SETSTR(cross_road, way->cross_road); + GMSD_SETSTR(addr, way->addr); +} + +void +garmin_fs_garmin_before_write(const waypoint *wpt, GPS_PWay way, const int protoid) +{ + garmin_fs_t *gmsd = GMSD_FIND(wpt); + + if (gmsd == NULL) return; + + /* ToDo: protocol specific conversion of class + way[i]->wpt_class = GMSD_GET(wpt_class, way[i]->wpt_class); + */ + way->dspl = gt_switch_display_mode_value( + GMSD_GET(display, way->dspl), gps_waypt_type, 0); + way->category = GMSD_GET(category, way->category); + way->dpth = GMSD_GET(depth, way->dpth); + way->dst = GMSD_GET(proximity, way->dpth); + way->temperature = GMSD_GET(temperature, way->temperature); + + GMSD_GETNSTR(cc, way->cc, sizeof(way->cc)); + GMSD_GETNSTR(city, way->city, sizeof(way->city)); + GMSD_GETNSTR(state, way->state, sizeof(way->state)); + GMSD_GETNSTR(facility, way->facility, sizeof(way->facility)); + GMSD_GETNSTR(cross_road, way->cross_road, sizeof(way->cross_road)); + GMSD_GETNSTR(addr, way->addr, sizeof(way->addr)); +} + diff --git a/gpsbabel/garmin_fs.h b/gpsbabel/garmin_fs.h index 0c85b4419..672d3e1c1 100644 --- a/gpsbabel/garmin_fs.h +++ b/gpsbabel/garmin_fs.h @@ -25,6 +25,7 @@ #include #include "defs.h" +#include "jeeps/gps.h" /* this order is used by most devices */ /* typedef enum { @@ -117,4 +118,7 @@ unsigned char garmin_fs_merge_category(const char *category_name, waypoint *wayp #define GMSD_SECTION_CATEGORIES "Garmin Categories" +void garmin_fs_garmin_after_read(const GPS_PWay way, waypoint *wpt, const int protoid); +void garmin_fs_garmin_before_write(const waypoint *wpt, GPS_PWay way, const int protoid); + #endif -- 2.30.2